home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / autoconf.lha / autoconf-1.4 / acspecific.m4 < prev    next >
Text File  |  1993-05-20  |  28KB  |  980 lines

  1. dnl Macros that test for specific features.
  2. dnl This file is part of Autoconf.
  3. dnl Copyright (C) 1992, 1993 Free Software Foundation, Inc.
  4. dnl
  5. dnl This program is free software; you can redistribute it and/or modify
  6. dnl it under the terms of the GNU General Public License as published by
  7. dnl the Free Software Foundation; either version 2, or (at your option)
  8. dnl any later version.
  9. dnl
  10. dnl This program is distributed in the hope that it will be useful,
  11. dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. dnl GNU General Public License for more details.
  14. dnl
  15. dnl You should have received a copy of the GNU General Public License
  16. dnl along with this program; if not, write to the Free Software
  17. dnl Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. dnl
  19. dnl Written by David MacKenzie, with help from
  20. dnl Franc,ois Pinard, Karl Berry, Richard Pixley, and Ian Lance Taylor.
  21. dnl
  22. dnl
  23. dnl checks for programs
  24. dnl
  25. dnl
  26. define(AC_PROG_CC,
  27. [AC_BEFORE([$0], [AC_PROG_CPP])AC_PROVIDE([$0])AC_PROGRAM_CHECK(CC, gcc, gcc, cc)
  28. # Find out if we are using GNU C, under whatever name.
  29. cat > conftest.c <<EOF
  30. #ifdef __GNUC__
  31.   yes
  32. #endif
  33. EOF
  34. ${CC-cc} -E conftest.c > conftest.out 2>&1
  35. if egrep yes conftest.out >/dev/null 2>&1; then
  36.   GCC=1 # For later tests.
  37. fi
  38. rm -f conftest*
  39. ])dnl
  40. dnl
  41. define(AC_GCC_TRADITIONAL,
  42. [AC_REQUIRE([AC_PROG_CC])AC_REQUIRE([AC_PROG_CPP])if test -n "$GCC"; then
  43.   echo checking whether -traditional is needed
  44. changequote(,)dnl
  45.   pattern="Autoconf.*'x'"
  46. changequote([,])dnl
  47.   prog='#include <sgtty.h>
  48. Autoconf TIOCGETP'
  49.   AC_PROGRAM_EGREP($pattern, $prog, need_trad=1)
  50.  
  51.   if test -z "$need_trad"; then
  52.     prog='#include <termio.h>
  53. Autoconf TCGETA'
  54.     AC_PROGRAM_EGREP($pattern, $prog, need_trad=1)
  55.   fi
  56.   test -n "$need_trad" && CC="$CC -traditional"
  57. fi
  58. ])dnl
  59. dnl
  60. define(AC_MINUS_C_MINUS_O,
  61. [echo checking whether $CC and cc understand -c and -o together
  62. echo 'foo(){}' > conftest.c
  63. # Make sure it works both with $CC and with simple cc.
  64. # We do the test twice because some compilers refuse to overwrite an
  65. # existing .o file with -o, though they will create one.
  66. if ${CC-cc} -c conftest.c -o conftest.o >/dev/null 2>&1 && \
  67. test -f conftest.o && ${CC-cc} -c conftest.c -o conftest.o >/dev/null 2>&1 && \
  68. cc -c conftest.c -o conftest2.o >/dev/null 2>&1 && \
  69. test -f conftest2.o && cc -c conftest.c -o conftest2.o >/dev/null 2>&1
  70. then
  71.   :
  72. else
  73.   AC_DEFINE(NO_MINUS_C_MINUS_O)
  74. fi
  75. rm -f conftest*
  76. ])dnl
  77. dnl
  78. define(AC_PROG_RANLIB, [AC_PROGRAM_CHECK(RANLIB, ranlib, ranlib, :)])dnl
  79. dnl
  80. define(AC_PROG_AWK, [AC_PROGRAMS_CHECK(AWK, mawk gawk nawk awk,)])dnl
  81. dnl
  82. define(AC_PROG_YACC,[AC_PROGRAMS_CHECK(YACC, 'bison -y' byacc, yacc)])dnl
  83. dnl
  84. define(AC_PROG_CPP,
  85. [AC_PROVIDE([$0])echo checking how to run the C preprocessor
  86. if test -z "$CPP"; then
  87.   CPP='${CC-cc} -E'
  88.   AC_TEST_CPP([#include <stdio.h>], , CPP=/lib/cpp)
  89. fi
  90. AC_SUBST(CPP)dnl
  91. ])dnl
  92. dnl
  93. define(AC_PROG_LEX,
  94. [AC_PROVIDE([$0])AC_PROGRAM_CHECK(LEX, flex, flex, lex)
  95. if test -z "$LEXLIB"
  96. then
  97.   case "$LEX" in
  98.   flex*)
  99.     # Should this be changed to use AC HAVE_LIBRARY? --friedman
  100.     if test -r /usr/local/lib/libfl.a
  101.     then LEXLIB=/usr/local/lib/libfl.a
  102.     elif test -r ${prefix}/lib/libfl.a
  103.     then LEXLIB=${prefix}/lib/libfl.a
  104.     else LEXLIB="-lfl"
  105.     fi
  106.     ;;
  107.   *) LEXLIB="-ll" ;;
  108.   esac
  109. fi
  110. AC_SUBST(LEXLIB)])dnl
  111. dnl
  112. define(AC_DECLARE_YYTEXT,
  113. [AC_REQUIRE([AC_PROG_CPP])AC_REQUIRE([AC_PROG_LEX])dnl
  114. echo checking how to declare yytext
  115. # Figure out what yytext is by creating a minimal parser and
  116. # examining the (preprocessed, in case macros are used) output.
  117. if test "z${DECLARE_YYTEXT}" = "z"; then
  118. changequote(,)dnl
  119.   echo '%%
  120. %%' | ${LEX}
  121.   if test -f lex.yy.c; then
  122.     LEX_OUTPUT_ROOT=lex.yy
  123.   elif test -f lexyy.c; then
  124.     LEX_OUTPUT_ROOT=lexyy
  125.   else
  126.     # Don't know what to do here.
  127.     echo "Can't find output from $LEX; assuming lex.yy.c." 1>&2
  128.     LEX_OUTPUT_ROOT=lex.yy
  129.   fi
  130.   AC_SUBST(LEX_OUTPUT_ROOT, "${LEX_OUTPUT_ROOT}")dnl
  131.   DECLARE_YYTEXT=`eval ${CPP} "${LEX_OUTPUT_ROOT}.c" |
  132.     sed -n '/extern.*yytext[^a-zA-Z0-9_]/s/^.*extern/extern/p'`
  133.   rm -f "${LEX_OUTPUT_ROOT}.c"
  134. changequote([,])dnl
  135. fi
  136. AC_DEFINE(DECLARE_YYTEXT, "$DECLARE_YYTEXT")dnl
  137. ])dnl
  138. dnl
  139. define(AC_PROG_INSTALL,
  140. [# Make sure to not get the incompatible SysV /etc/install and
  141. # /usr/sbin/install, which might be in PATH before a BSD-like install,
  142. # or the SunOS /usr/etc/install directory, or the AIX /bin/install,
  143. # or the AFS install, which mishandles nonexistent args, or
  144. # /usr/ucb/install on SVR4, which tries to use the nonexistent group
  145. # `staff'.  On most BSDish systems install is in /usr/bin, not /usr/ucb
  146. # anyway.  Sigh.
  147. if test "z${INSTALL}" = "z" ; then
  148.   echo checking for install
  149.   IFS="${IFS=     }"; saveifs="$IFS"; IFS="${IFS}:"
  150.   for dir in $PATH; do
  151.     test -z "$dir" && dir=.
  152.     case $dir in
  153.     /etc|/usr/sbin|/usr/etc|/usr/afsws/bin|/usr/ucb) ;;
  154.     *)
  155.       if test -f $dir/installbsd; then
  156.     INSTALL="$dir/installbsd -c" # OSF1
  157.     INSTALL_PROGRAM='$(INSTALL)'
  158.     INSTALL_DATA='$(INSTALL) -m 644'
  159.     break
  160.       fi
  161.       if test -f $dir/install; then
  162.     if grep dspmsg $dir/install >/dev/null 2>&1; then
  163.       : # AIX
  164.     else
  165.       INSTALL="$dir/install -c"
  166.       INSTALL_PROGRAM='$(INSTALL)'
  167.       INSTALL_DATA='$(INSTALL) -m 644'
  168.       break
  169.     fi
  170.       fi
  171.       ;;
  172.     esac
  173.   done
  174.   IFS="$saveifs"
  175. fi
  176. INSTALL=${INSTALL-cp}
  177. AC_SUBST(INSTALL)dnl
  178. INSTALL_PROGRAM=${INSTALL_PROGRAM-'$(INSTALL)'}
  179. AC_SUBST(INSTALL_PROGRAM)dnl
  180. INSTALL_DATA=${INSTALL_DATA-'$(INSTALL)'}
  181. AC_SUBST(INSTALL_DATA)dnl
  182. ])dnl
  183. dnl
  184. define(AC_LN_S,
  185. [echo checking for ln -s
  186. rm -f conftestdata
  187. if ln -s X conftestdata 2>/dev/null
  188. then
  189.   rm -f conftestdata
  190.   LN_S="ln -s"
  191. else
  192.   LN_S=ln
  193. fi
  194. AC_SUBST(LN_S)
  195. ])dnl
  196. dnl
  197. define(AC_RSH,
  198. [echo checking for remote shell
  199. if test -f /usr/ucb/rsh || test -f /usr/bin/remsh || test -f /usr/bin/rsh ||
  200.   test -f /usr/bsd/rsh || test -f /usr/bin/nsh; then
  201.   RTAPELIB=rtapelib.o
  202. else
  203.   AC_HEADER_CHECK(netdb.h, AC_DEFINE(HAVE_NETDB_H) RTAPELIB=rtapelib.o,
  204.     AC_DEFINE(NO_REMOTE))
  205. fi
  206. AC_SUBST(RTAPELIB)dnl
  207. ])dnl
  208. dnl
  209. dnl
  210. dnl checks for header files
  211. dnl
  212. dnl
  213. define(AC_STDC_HEADERS,
  214. [AC_REQUIRE([AC_PROG_CPP])dnl
  215. echo checking for ANSI C header files
  216. AC_TEST_CPP([#include <stdlib.h>
  217. #include <stdarg.h>
  218. #include <string.h>
  219. #include <float.h>],
  220. [# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  221. AC_HEADER_EGREP(memchr, string.h,
  222. # SGI's /bin/cc from Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
  223. AC_TEST_PROGRAM([#include <ctype.h>
  224. #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
  225. #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
  226. #define XOR(e,f) (((e) && !(f)) || (!(e) && (f)))
  227. int main () { int i; for (i = 0; i < 256; i++)
  228. if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
  229. exit (0); }
  230. ],AC_DEFINE(STDC_HEADERS)))])
  231. ])dnl
  232. dnl
  233. define(AC_UNISTD_H, [AC_HEADER_CHECK(unistd.h,
  234.   AC_DEFINE(HAVE_UNISTD_H))])dnl
  235. dnl
  236. define(AC_USG,
  237. [AC_COMPILE_CHECK([BSD string and memory functions],
  238. [#include <strings.h>], [rindex(0, 0); bzero(0, 0);], , AC_DEFINE(USG))])dnl
  239. dnl
  240. dnl
  241. dnl If memchr and the like aren't declared in <string.h>, include <memory.h>.
  242. dnl To avoid problems, don't check for gcc2 built-ins.
  243. define(AC_MEMORY_H,
  244. [echo checking whether string.h declares mem functions
  245. AC_HEADER_EGREP(memchr, string.h, ,
  246.   AC_HEADER_CHECK(memory.h, AC_DEFINE(NEED_MEMORY_H)))]
  247. )dnl
  248. dnl
  249. define(AC_MAJOR_HEADER,
  250. [AC_COMPILE_CHECK([major, minor and makedev header],
  251. [#include <sys/types.h>],
  252. [return makedev(0, 0);], makedev=1)
  253. if test -z "$makedev"; then
  254. AC_HEADER_CHECK(sys/mkdev.h, AC_DEFINE(MAJOR_IN_MKDEV) makedev=1)
  255. fi
  256. if test -z "$makedev"; then
  257. AC_HEADER_CHECK(sys/sysmacros.h, AC_DEFINE(MAJOR_IN_SYSMACROS))
  258. fi]
  259. )dnl
  260. dnl
  261. define(AC_DIR_HEADER,
  262. [AC_PROVIDE([$0])echo checking for directory library header
  263. dirheader=
  264. AC_DIR_HEADER_CHECK(dirent.h, DIRENT)
  265. AC_DIR_HEADER_CHECK(sys/ndir.h, SYSNDIR)
  266. AC_DIR_HEADER_CHECK(sys/dir.h, SYSDIR)
  267. AC_DIR_HEADER_CHECK(ndir.h, NDIR)
  268.  
  269. echo checking for closedir return value
  270. AC_TEST_PROGRAM([#include <sys/types.h>
  271. #include <$dirheader>
  272. int closedir(); main() { exit(closedir(opendir(".")) != 0); }], ,
  273. AC_DEFINE(VOID_CLOSEDIR))
  274. ])dnl
  275. dnl Subroutine of AC_DIR_HEADER.
  276. dnl ??? I tried to put this define inside AC_DIR_HEADER, but when I did
  277. dnl that, $1 and $2 did not get expanded. --roland
  278. dnl Check if $1 is the winning directory library header file.
  279. dnl It must not only exist, but also correctly define the `DIR' type.
  280. dnl If it is really winning, define $2 and set shell var `dirheader' to $1.
  281. define(AC_DIR_HEADER_CHECK, [dnl
  282. if test -z "$dirheader"; then
  283.   AC_COMPILE_CHECK($1, [#include <sys/types.h>
  284. #include <]$1[>],
  285.              [DIR *dirp = opendir ("/");],
  286.            AC_DEFINE($2) dirheader=$1)dnl
  287. fi])dnl
  288. dnl
  289. dnl
  290. dnl checks for typedefs
  291. dnl
  292. dnl
  293. define(AC_GETGROUPS_T,
  294. [AC_REQUIRE([AC_UID_T])dnl
  295. echo checking for type of array argument to getgroups
  296. changequote(,)dnl
  297. dnl Do not put single quotes in the C program text!!
  298. prog='/* Thanks to Mike Rendell for this test.  */
  299. #include <sys/types.h>
  300. #define NGID 256
  301. #undef MAX
  302. #define MAX(x,y) ((x) > (y) ? (x) : (y))
  303. main()
  304. {
  305.   gid_t gidset[NGID];
  306.   int i, n;
  307.   union { gid_t gval; long lval; }  val;
  308.  
  309.   val.lval = -1;
  310.   for (i = 0; i < NGID; i++)
  311.     gidset[i] = val.gval;
  312.   n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1,
  313.                  gidset);
  314.   /* Exit non-zero if getgroups seems to require an array of ints.  This
  315.      happens when gid_t is short but getgroups modifies an array of ints.  */
  316.   exit ((n > 0 && gidset[n] != val.gval) ? 1 : 0);
  317. }'
  318. changequote([,])dnl
  319. AC_TEST_PROGRAM([$prog],
  320.         AC_DEFINE(GETGROUPS_T, gid_t),
  321.         AC_DEFINE(GETGROUPS_T, int))
  322. ])dnl
  323. dnl
  324. define(AC_UID_T,
  325. [AC_PROVIDE([$0])echo checking for uid_t in sys/types.h
  326. AC_HEADER_EGREP(uid_t, sys/types.h, ,
  327.   AC_DEFINE(uid_t, int) AC_DEFINE(gid_t, int))])dnl
  328. dnl
  329. define(AC_SIZE_T,
  330. [echo checking for size_t in sys/types.h
  331. AC_HEADER_EGREP(size_t, sys/types.h, , AC_DEFINE(size_t, unsigned))])dnl
  332. dnl
  333. define(AC_PID_T,
  334. [AC_PROVIDE([$0])echo checking for pid_t in sys/types.h
  335. AC_HEADER_EGREP(pid_t, sys/types.h, , AC_DEFINE(pid_t, int))])dnl
  336. dnl
  337. define(AC_MODE_T,
  338. [echo checking for mode_t in sys/types.h
  339. AC_HEADER_EGREP(mode_t, sys/types.h, , AC_DEFINE(mode_t, int))])dnl
  340. dnl
  341. define(AC_RETSIGTYPE,
  342. [AC_COMPILE_CHECK([return type of signal handlers],
  343. [#include <sys/types.h>
  344. #include <signal.h>
  345. #ifdef signal
  346. #undef signal
  347. #endif
  348. extern void (*signal ()) ();],
  349. [int i;],
  350. [AC_DEFINE(RETSIGTYPE, void)],
  351. [AC_DEFINE(RETSIGTYPE, int)])]
  352. )dnl
  353. dnl
  354. dnl
  355. dnl checks for functions
  356. dnl
  357. dnl
  358. define(AC_VPRINTF,
  359. [AC_COMPILE_CHECK([vprintf], , [vprintf();], AC_DEFINE(HAVE_VPRINTF),
  360. vprintf_missing=1)
  361. if test -n "$vprintf_missing"; then
  362. AC_COMPILE_CHECK([_doprnt], , [_doprnt();], AC_DEFINE(HAVE_DOPRNT))
  363. fi
  364. ])dnl
  365. dnl
  366. define(AC_VFORK,
  367. [AC_REQUIRE([AC_PID_T])AC_HEADER_CHECK(vfork.h, AC_DEFINE(HAVE_VFORK_H))
  368. echo checking for working vfork
  369. AC_TEST_PROGRAM([/* Thanks to Paul Eggert for this test.  */
  370. #include <stdio.h>
  371. #include <sys/types.h>
  372. #include <sys/stat.h>
  373. #ifdef HAVE_UNISTD_H
  374. #include <unistd.h>
  375. #endif
  376. #ifdef HAVE_VFORK_H
  377. #include <vfork.h>
  378. #endif
  379. main() {
  380.   pid_t parent = getpid();
  381.   pid_t child = vfork();
  382.  
  383.   if (child == 0) {
  384.     /* On sparc systems, changes by the child to local and incoming
  385.        argument registers are propagated back to the parent.
  386.        The compiler is told about this with #include <vfork.h>,
  387.        but some compilers (e.g. gcc -O) don't grok <vfork.h>.
  388.        Test for this by using lots of local variables, at least
  389.        as many local variables as main has allocated so far
  390.        including compiler temporaries.  4 locals are enough for
  391.        gcc 1.40.3 on a sparc, but we use 8 to be safe.
  392.        A buggy compiler should reuse the register of parent
  393.        for one of the local variables, since it will think that
  394.        parent can't possibly be used any more in this routine.
  395.        Assigning to the local variable will thus munge parent
  396.        in the parent process.  */
  397.     pid_t
  398.       p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
  399.       p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
  400.     /* Convince the compiler that p..p7 are live; otherwise, it might
  401.        use the same hardware register for all 8 local variables.  */
  402.     if (p != p1 || p != p2 || p != p3 || p != p4
  403.     || p != p5 || p != p6 || p != p7)
  404.       _exit(1);
  405.  
  406.     /* On some systems (e.g. IRIX 3.3),
  407.        vfork doesn't separate parent from child file descriptors.
  408.        If the child closes a descriptor before it execs or exits,
  409.        this munges the parent's descriptor as well.
  410.        Test for this by closing stdout in the child.  */
  411.     _exit(close(fileno(stdout)) != 0);
  412.   } else {
  413.     int status;
  414.     struct stat st;
  415.  
  416.     while (wait(&status) != child)
  417.       ;
  418.     exit(
  419.      /* Was there some problem with vforking?  */
  420.      child < 0
  421.  
  422.      /* Did the child fail?  (This shouldn't happen.)  */
  423.      || status
  424.  
  425.      /* Did the vfork/compiler bug occur?  */
  426.      || parent != getpid()
  427.  
  428.      /* Did the file descriptor bug occur?  */
  429.      || fstat(fileno(stdout), &st) != 0
  430.      );
  431.   }
  432. }], , AC_DEFINE(vfork, fork))
  433. ])dnl
  434. dnl
  435. define(AC_WAIT3,
  436. [echo checking for wait3 that fills in rusage
  437. AC_TEST_PROGRAM([#include <sys/types.h>
  438. #include <sys/time.h>
  439. #include <sys/resource.h>
  440. #include <stdio.h>
  441. /* HP-UX has wait3 but does not fill in rusage.  */
  442. main() {
  443.   struct rusage r;
  444.   int i;
  445.   r.ru_nvcsw = 0;
  446.   switch (fork()) {
  447.   case 0: /* Child.  */
  448.     sleep(1); /* Give up the CPU.  */
  449.     _exit(0);
  450.   case -1: _exit(0); /* What can we do?  */
  451.   default: /* Parent.  */
  452.     wait3(&i, 0, &r);
  453.     exit(r.ru_nvcsw == 0);
  454.   }
  455. }], AC_DEFINE(HAVE_WAIT3))
  456. ])dnl
  457. dnl
  458. define(AC_ALLOCA,
  459. [# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
  460. # for constant arguments.  Useless!
  461. AC_COMPILE_CHECK(working alloca.h, [#include <alloca.h>],
  462.   [char *p = alloca(2 * sizeof(int));], AC_DEFINE(HAVE_ALLOCA_H))
  463. decl="#ifdef __GNUC__
  464. #define alloca __builtin_alloca
  465. #else
  466. #if HAVE_ALLOCA_H
  467. #include <alloca.h>
  468. #else
  469. #ifdef _AIX
  470.  #pragma alloca
  471. #else
  472. char *alloca ();
  473. #endif
  474. #endif
  475. #endif
  476. "
  477. AC_COMPILE_CHECK([alloca], $decl,
  478. [char *p = (char *) alloca(1);], , [dnl
  479. alloca_missing=1
  480. AC_PROGRAM_EGREP(winnitude, [
  481. #if defined(CRAY) && ! defined(CRAY2)
  482. winnitude
  483. #else
  484. lossage
  485. #endif
  486. ],
  487. AC_FUNC_CHECK([_getb67],AC_DEFINE([CRAY_STACKSEG_END],[_getb67]),
  488. AC_FUNC_CHECK([GETB67],AC_DEFINE([CRAY_STACKSEG_END],[GETB67]),
  489. AC_FUNC_CHECK([getb67],AC_DEFINE([CRAY_STACKSEG_END],[getb67])))))
  490. ])
  491. if test -n "$alloca_missing"; then
  492.   # The SVR3 libPW and SVR4 libucb both contain incompatible functions
  493.   # that cause trouble.  Some versions do not even contain alloca or
  494.   # contain a buggy version.  If you still want to use their alloca,
  495.   # use ar to extract alloca.o from them instead of compiling alloca.c.
  496.   ALLOCA=alloca.o
  497.  
  498.   echo 'checking stack direction for C alloca'
  499.   AC_TEST_PROGRAM([find_stack_direction ()
  500. {
  501.   static char *addr = 0;
  502.   auto char dummy;
  503.   if (addr == 0)
  504.     {
  505.       addr = &dummy;
  506.       return find_stack_direction ();
  507.     }
  508.   else
  509.     return (&dummy > addr) ? 1 : -1;
  510. }
  511. main ()
  512. {
  513.   exit (find_stack_direction() < 0);
  514. }], dnl
  515. AC_DEFINE(STACK_DIRECTION,1), AC_DEFINE(STACK_DIRECTION,-1), dnl
  516. AC_DEFINE(STACK_DIRECTION,0))
  517. fi
  518. AC_SUBST(ALLOCA)dnl
  519. ])dnl
  520. dnl
  521. define(AC_GETLOADAVG,
  522. [# Some definitions of getloadavg require that the program be installed setgid.
  523. AC_SUBST(NEED_SETGID)NEED_SETGID=false
  524.  
  525. # Check for the 4.4BSD definition of getloadavg.
  526. AC_HAVE_LIBRARY(utils, LIBS="$LIBS -lutils")
  527.  
  528. # There is a commonly available library for RS/6000 AIX.  Is it installed?
  529. AC_HAVE_LIBRARY(getloadavg, LIBS="$LIBS -lgetloadavg", [dnl
  530. # Since it is not a standard part of AIX, it might be installed locally.
  531. LIBS_save="$LIBS"
  532. LIBS="$LIBS /usr/local/lib/libgetloadavg.a"
  533. AC_COMPILE_CHECK([local getloadavg library], ,
  534.   [double load; int nelem = getloadavg (&load, 1);],
  535.   [getloadavg_missing=false], [getloadavg_missing=true])dnl
  536. if $getloadavg_missing; then
  537.   # It wasn't there.  Restore the old value of LIBS.
  538.   LIBS="$LIBS_save"
  539. else
  540.   # It was there.  If it is a shared library, we will need a -L switch to
  541.   # tell the program where to find it at run-time; just giving the full
  542.   # file name is not enough.
  543.   LDFLAGS="$LDFLAGS -L/usr/local/lib"
  544. fi])
  545. AC_REPLACE_FUNCS(getloadavg)
  546.  
  547. case "$LIBOBJS" in
  548. *getloadavg*)
  549. AC_HEADER_CHECK(sys/dg_sys_info.h, AC_DEFINE(DGUX) have_sym=1)
  550. if test -z "$have_sym"; then
  551. AC_HEADER_CHECK(dwarf.h, AC_DEFINE(SVR4) LIBS="$LIBS -lelf" have_sym=1)
  552. fi
  553. if test -z "$have_sym"; then
  554. # Solaris 2 does not use dwarf, but it's still SVR4.
  555. AC_HEADER_CHECK(elf.h, AC_DEFINE(SVR4) LIBS="$LIBS -lelf" have_sym=1
  556.   AC_HAVE_LIBRARY(kvm, LIBS="$LIBS -lkvm"))
  557. fi
  558. if test -z "$have_sym"; then
  559. AC_HEADER_CHECK(inq_stats/cpustats.h, AC_DEFINE(UMAX4_3) AC_DEFINE(UMAX) have_sym=1)
  560. fi
  561. if test -z "$have_sym"; then
  562. AC_HEADER_CHECK(sys/cpustats.h, AC_DEFINE(UMAX) have_sym=1)
  563. fi
  564. dnl I think MIPS is supposed to be defined on non-DEC MIPS systems.
  565. dnl But I don't know how to identify them.
  566. dnl AC_HEADER_CHECK(who-knows.h, AC_DEFINE(MIPS) have_sym=1)
  567. if test -z "$have_sym"; then
  568. AC_HAVE_HEADERS(mach/mach.h)
  569. fi
  570. if test -z "$have_sym"; then
  571. AC_HEADER_CHECK(nlist.h,
  572. [AC_DEFINE(NLIST_STRUCT)
  573. AC_COMPILE_CHECK(n_un in struct nlist, [#include <nlist.h>],
  574. [struct nlist n; n.n_un.n_name = 0;],
  575. AC_DEFINE(NLIST_NAME_UNION))])dnl
  576. fi
  577.  
  578. # Figure out whether we will need to install setgid.
  579. AC_PROGRAM_EGREP([Yowza Am I SETGID yet], [dnl
  580. #include "${srcdir}/getloadavg.c"
  581. #ifdef LDAV_PRIVILEGED
  582. Yowza Am I SETGID yet
  583. #endif], [AC_DEFINE(GETLOADAVG_PRIVILEGED) NEED_SETGID=true])dnl
  584. ;;
  585. esac
  586.  
  587. if $NEED_SETGID; then
  588.   AC_SUBST(KMEM_GROUP)# Figure out what group owns /dev/kmem.
  589.   # The installed program will need to be setgid and owned by that group.
  590. changequote(,)dnl
  591.   KMEM_GROUP=`ls -lg /dev/kmem |
  592.           sed 's/^.[rwx-]*[     ]*[0-9]*[     ]*[^     ]*\
  593. [     ]*\([^     ]*\)[     ].*$/\1/'`
  594. changequote([,])dnl
  595. fi
  596. ])dnl
  597. dnl
  598. define(AC_UTIME_NULL,
  599. [echo checking utime with null argument
  600. rm -f conftestdata; > conftestdata
  601. # Sequent interprets utime(file, 0) to mean use start of epoch.  Wrong.
  602. AC_TEST_PROGRAM([#include <sys/types.h>
  603. #include <sys/stat.h>
  604. main() {
  605. struct stat s, t;
  606. exit(!(stat ("conftestdata", &s) == 0 && utime("conftestdata", (long *)0) == 0
  607. && stat("conftestdata", &t) == 0 && t.st_mtime >= s.st_mtime
  608. && t.st_mtime - s.st_mtime < 120));
  609. }], AC_DEFINE(HAVE_UTIME_NULL))
  610. rm -f core
  611. ])dnl
  612. dnl
  613. define(AC_STRCOLL, [echo checking for strcoll
  614. AC_TEST_PROGRAM([#include <string.h>
  615. main ()
  616. {
  617.   exit (strcoll ("abc", "def") >= 0 ||
  618.     strcoll ("ABC", "DEF") >= 0 ||
  619.     strcoll ("123", "456") >= 0);
  620. }], AC_DEFINE(HAVE_STRCOLL))])dnl
  621. dnl
  622. define(AC_SETVBUF_REVERSED,
  623. [AC_TEST_PROGRAM([#include <stdio.h>
  624. main () {
  625.   /* If setvbuf has the reversed format, exit 0. */
  626.   if (setvbuf(stdout, _IOLBF, (char *) 0, BUFSIZ) != 0)/* The reversed way.  */
  627.     exit(1);
  628.   putc('\r', stdout);
  629.   exit(0);            /* Non-reversed systems segv here.  */
  630. }], AC_DEFINE(SETVBUF_REVERSED))
  631. rm -f core
  632. ])dnl
  633. dnl
  634. dnl
  635. dnl checks for structure members
  636. dnl
  637. dnl
  638. define(AC_STRUCT_TM,
  639. [AC_PROVIDE([$0])AC_COMPILE_CHECK([struct tm in time.h],
  640. [#include <sys/types.h>
  641. #include <time.h>],
  642. [struct tm *tp;], , AC_DEFINE(TM_IN_SYS_TIME))])dnl
  643. dnl
  644. define(AC_TIME_WITH_SYS_TIME,
  645. [AC_COMPILE_CHECK([whether time.h and sys/time.h may both be included],
  646. [#include <sys/types.h>
  647. #include <sys/time.h>
  648. #include <time.h>],
  649. [struct tm *tp;], AC_DEFINE(TIME_WITH_SYS_TIME))])dnl
  650. dnl
  651. define(AC_TIMEZONE,
  652. [AC_REQUIRE([AC_STRUCT_TM])decl='#include <sys/types.h>
  653. '
  654. case "$DEFS" in
  655.   *TM_IN_SYS_TIME*) decl="$decl
  656. #include <sys/time.h>
  657. " ;;
  658.   *) decl="$decl
  659. #include <time.h>
  660. " ;;
  661. esac
  662. AC_COMPILE_CHECK([tm_zone in struct tm], $decl,
  663. [struct tm tm; tm.tm_zone;], AC_DEFINE(HAVE_TM_ZONE), no_tm_zone=1)
  664. if test -n "$no_tm_zone"; then
  665. AC_COMPILE_CHECK(tzname, changequote(<<,>>)dnl
  666. <<#include <time.h>
  667. #ifndef tzname /* For SGI.  */
  668. extern char *tzname[]; /* RS6000 and others want it this way.  */
  669. #endif>>, changequote([,])dnl
  670. [atoi(*tzname);], AC_DEFINE(HAVE_TZNAME))
  671. fi
  672. ])dnl
  673. dnl
  674. define(AC_ST_BLOCKS,
  675. [AC_COMPILE_CHECK([st_blocks in struct stat],
  676. [#include <sys/types.h>
  677. #include <sys/stat.h>], [struct stat s; s.st_blocks;],
  678. AC_DEFINE(HAVE_ST_BLOCKS), LIBOBJS="$LIBOBJS fileblocks.o")dnl
  679. AC_SUBST(LIBOBJS)dnl
  680. ])dnl
  681. dnl
  682. define(AC_ST_BLKSIZE,
  683. [AC_COMPILE_CHECK([st_blksize in struct stat],
  684. [#include <sys/types.h>
  685. #include <sys/stat.h>], [struct stat s; s.st_blksize;],
  686. AC_DEFINE(HAVE_ST_BLKSIZE))])dnl
  687. dnl
  688. define(AC_ST_RDEV,
  689. [AC_COMPILE_CHECK([st_rdev in struct stat],
  690. [#include <sys/types.h>
  691. #include <sys/stat.h>], [struct stat s; s.st_rdev;],
  692. AC_DEFINE(HAVE_ST_RDEV))])dnl
  693. dnl
  694. dnl
  695. dnl checks for compiler characteristics
  696. dnl
  697. dnl
  698. define(AC_CROSS_CHECK,
  699. [AC_PROVIDE([$0])echo checking whether cross-compiling
  700. # If we cannot run a trivial program, we must be cross compiling.
  701. AC_TEST_PROGRAM([main(){exit(0);}], , cross_compiling=1)
  702. ])dnl
  703. dnl
  704. define(AC_CHAR_UNSIGNED,
  705. [echo checking for unsigned characters
  706. AC_TEST_PROGRAM(
  707. [/* volatile prevents gcc2 from optimizing the test away on sparcs.  */
  708. #if !__STDC__
  709. #define volatile
  710. #endif
  711. main() {
  712. #ifdef __CHAR_UNSIGNED__
  713.   exit(1); /* No need to redefine it.  */
  714. #else
  715.   volatile char c = 255; exit(c < 0);
  716. #endif
  717. }], AC_DEFINE(__CHAR_UNSIGNED__))]
  718. )dnl
  719. dnl
  720. define(AC_LONG_DOUBLE,
  721. [AC_REQUIRE([AC_PROG_CC])dnl
  722. if test -n "$GCC"; then
  723. AC_DEFINE(HAVE_LONG_DOUBLE)
  724. else
  725. AC_COMPILE_CHECK([long double], , [} long double foo() {],
  726. AC_DEFINE(HAVE_LONG_DOUBLE))
  727. fi
  728. ])dnl
  729. dnl
  730. define(AC_INT_16_BITS,
  731. [echo checking integer size
  732. AC_TEST_PROGRAM([main() { exit(!(sizeof(long) > sizeof(int))); }],
  733.  AC_DEFINE(INT_16_BITS))
  734. ])dnl
  735. dnl
  736. define(AC_WORDS_BIGENDIAN,
  737. [echo checking byte ordering
  738. AC_TEST_PROGRAM([main () {
  739.   /* Are we little or big endian?  From Harbison&Steele.  */
  740.   union
  741.   {
  742.     long l;
  743.     char c[sizeof (long)];
  744.   } u;
  745.   u.l = 1;
  746.   exit (u.c[sizeof (long) - 1] == 1);
  747. }], , AC_DEFINE(WORDS_BIGENDIAN))
  748. ])dnl
  749. dnl
  750. define(AC_ARG_ARRAY,
  751. [echo checking whether the address of an argument can be used as an array
  752. AC_TEST_PROGRAM([main() {
  753. /* Return 0 iff arg arrays are ok.  */
  754. exit(!x(1, 2, 3, 4));
  755. }
  756. x(a, b, c, d) {
  757.   return y(a, &b);
  758. }
  759. /* Return 1 iff arg arrays are ok.  */
  760. y(a, b) int *b; {
  761.   return a == 1 && b[0] == 2 && b[1] == 3 && b[2] == 4;
  762. }], , AC_DEFINE(NO_ARG_ARRAY))
  763. rm -f core
  764. ])dnl
  765. dnl
  766. define(AC_INLINE,
  767. [AC_REQUIRE([AC_PROG_CC])if test -n "$GCC"; then
  768. AC_COMPILE_CHECK([inline], , [} inline foo() {], , AC_DEFINE(inline, __inline))
  769. fi
  770. ])dnl
  771. define(AC_CONST,
  772. [changequote(,)dnl
  773. dnl Do not put single quotes in the C program text!!
  774. prog='/* Ultrix mips cc rejects this.  */
  775. typedef int charset[2]; const charset x;
  776. /* SunOS 4.1.1 cc rejects this.  */
  777. char const *const *ccp;
  778. char **p;
  779. /* AIX XL C 1.02.0.0 rejects this.
  780.    It does not let you subtract one const X* pointer from another in an arm
  781.    of an if-expression whose if-part is not a constant expression */
  782. const char *g = "string";
  783. p = &g + (g ? g-g : 0);
  784. /* HPUX 7.0 cc rejects these. */
  785. ++ccp;
  786. p = (char**) ccp;
  787. ccp = (char const *const *) p;
  788. { /* SCO 3.2v4 cc rejects this.  */
  789.   char *t;
  790.   char const *s = 0 ? (char *) 0 : (char const *) 0;
  791.  
  792.   *t++ = 0;
  793. }
  794. { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
  795.   int x[] = {25,17};
  796.   const int *foo = &x[0];
  797.   ++foo;
  798. }
  799. { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
  800.   typedef const int *iptr;
  801.   iptr p = 0;
  802.   ++p;
  803. }
  804. { /* AIX XL C 1.02.0.0 rejects this saying
  805.      "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
  806.   struct s { int j; const int *ap[3]; };
  807.   struct s *b; b->j = 5;
  808. }'
  809. changequote([,])dnl
  810. AC_COMPILE_CHECK([working const], , [$prog], , AC_DEFINE(const,))])dnl
  811. dnl
  812. dnl
  813. dnl checks for operating system services
  814. dnl
  815. dnl
  816. define(AC_HAVE_POUNDBANG, [dnl
  817. echo "checking if \`#!' works in shell scripts"
  818. cat <<'__EOF__' > conftest.csh
  819. #!/bin/csh -f
  820. setenv SHELL /bin/csh
  821. # Avoid tcsh bug 'Bad Hertz Value':
  822. setenv HZ 60
  823. # Make sure foo doesn't get exported into the environment
  824. # Astoundingly, some versions of csh don't have unsetenv.
  825. if (${?foo}) unsetenv foo >& /dev/null
  826. if (${?foo}) unset foo
  827. set output="`./conftest.sh`"
  828. if ( "$[]output" == "foo=bar" ) then
  829.    exit 0
  830. endif
  831. exit 1
  832. __EOF__
  833. dnl If the following is really run with sh, then 1st positional arg will be
  834. dnl "foo=bar".  If the following script was executed by csh, then a shell
  835. dnl variable "foo" will have the value "var".
  836. cat <<'__EOF__' > conftest.sh
  837. #!/bin/sh
  838. set foo=bar
  839. echo "$[]*"
  840. __EOF__
  841. chmod 777 conftest.csh conftest.sh
  842. (csh -f ./conftest.csh) 2> /dev/null
  843. if test $? = 0 ; then
  844.    :; $1
  845. else
  846.    :; $2
  847. fi
  848. rm -f conftest.csh conftest.sh
  849. ])dnl
  850. define(AC_REMOTE_TAPE,
  851. [echo checking for remote tape and socket header files
  852. AC_HEADER_CHECK(sys/mtio.h, AC_DEFINE(HAVE_SYS_MTIO_H) have_mtio=1)
  853. if test -n "$have_mtio"; then
  854. AC_TEST_CPP([#include <sgtty.h>
  855. #include <sys/socket.h>], PROGS="$PROGS rmt")
  856. fi
  857. ])dnl
  858. dnl
  859. define(AC_LONG_FILE_NAMES,
  860. [echo checking for long file names
  861. lost=false
  862. # Test for long file names in all the places we know might matter:
  863. #      .        the current directory, where building will happen
  864. #      /tmp        where it might want to write temporary files
  865. #      /usr/tmp        likewise
  866. #      $prefix        where we will be installing things
  867. #      $exec_prefix    likewise
  868. for dir in . /tmp /usr/tmp $prefix $exec_prefix ; do
  869.   (echo 1 > $dir/conftest9012345) 2>/dev/null
  870.   (echo 2 > $dir/conftest9012346) 2>/dev/null
  871.   val=`cat $dir/conftest9012345 2>/dev/null`
  872.   test -f $dir/conftest9012345 && test "$val" = 1 || lost=true
  873.   rm -f conftest9012345 conftest9012346
  874. done
  875. $lost || AC_DEFINE(HAVE_LONG_FILE_NAMES)
  876. ])dnl
  877. dnl
  878. define(AC_RESTARTABLE_SYSCALLS,
  879. [echo checking for restartable system calls
  880. AC_TEST_PROGRAM(
  881. [/* Exit 0 (true) if wait returns something other than -1,
  882.    i.e. the pid of the child, which means that wait was restarted
  883.    after getting the signal.  */
  884. #include <sys/types.h>
  885. #include <signal.h>
  886. ucatch (isig) { }
  887. main () {
  888.   int i = fork (), status;
  889.   if (i == 0) { sleep (3); kill (getppid (), SIGINT); sleep (3); exit (0); }
  890.   signal (SIGINT, ucatch);
  891.   status = wait(&i);
  892.   if (status == -1) wait(&i);
  893.   exit (status == -1);
  894. }
  895. ], AC_DEFINE(HAVE_RESTARTABLE_SYSCALLS))
  896. ])dnl
  897. dnl
  898. dnl
  899. dnl checks for UNIX variants
  900. dnl
  901. dnl
  902. define(AC_AIX,
  903. [echo checking for AIX
  904. AC_BEFORE([$0], [AC_COMPILE_CHECK])AC_BEFORE([$0], [AC_TEST_PROGRAM])AC_BEFORE([$0], [AC_HEADER_EGREP])AC_BEFORE([$0], [AC_TEST_CPP])AC_PROGRAM_EGREP(yes,
  905. [#ifdef _AIX
  906.   yes
  907. #endif
  908. ], AC_DEFINE(_ALL_SOURCE))
  909. ])dnl
  910. dnl
  911. define(AC_MINIX,
  912. [AC_BEFORE([$0], [AC_COMPILE_CHECK])AC_BEFORE([$0], [AC_TEST_PROGRAM])AC_BEFORE([$0], [AC_HEADER_EGREP])AC_BEFORE([$0], [AC_TEST_CPP])AC_HEADER_CHECK(minix/config.h, MINIX=1)
  913. # The Minix shell can't assign to the same variable on the same line!
  914. if test -n "$MINIX"; then
  915.   AC_DEFINE(_POSIX_SOURCE)
  916.   AC_DEFINE(_POSIX_1_SOURCE, 2)
  917.   AC_DEFINE(_MINIX)
  918. fi
  919. ])dnl
  920. dnl
  921. define(AC_ISC_POSIX,
  922. [AC_BEFORE([$0], [AC_COMPILE_CHECK])AC_BEFORE([$0], [AC_TEST_PROGRAM])AC_BEFORE([$0], [AC_HEADER_EGREP])AC_BEFORE([$0], [AC_TEST_CPP])echo checking for POSIXized ISC
  923. if test -d /etc/conf/kconfig.d &&
  924.   grep _POSIX_VERSION [/usr/include/sys/unistd.h] >/dev/null 2>&1
  925. then
  926.   ISC=1 # If later tests want to check for ISC.
  927.   AC_DEFINE(_POSIX_SOURCE)
  928.   if test -n "$GCC"; then
  929.     CC="$CC -posix"
  930.   else
  931.     CC="$CC -Xp"
  932.   fi
  933. fi
  934. ])dnl
  935. dnl
  936. define(AC_XENIX_DIR,
  937. [AC_REQUIRE([AC_DIR_HEADER])echo checking for Xenix
  938. AC_PROGRAM_EGREP(yes,
  939. [#if defined(M_XENIX) && !defined(M_UNIX)
  940.   yes
  941. #endif
  942. ], XENIX=1)
  943. if test -n "$XENIX"; then
  944.   LIBS="$LIBS -lx"
  945.   case "$DEFS" in
  946.   *SYSNDIR*) ;;
  947.   *) LIBS="-ldir $LIBS" ;; # Make sure -ldir precedes any -lx.
  948.   esac
  949. fi
  950. ])dnl
  951. dnl
  952. define(AC_SCO_INTL,
  953. [echo checking for SCO UNIX libintl
  954. AC_PROGRAM_EGREP(yes,
  955. [#if defined(M_UNIX)
  956.   yes
  957. #endif
  958. ], SCO_UNIX=1)
  959. test -n "$SCO_UNIX" && test -f /lib/libintl.a &&
  960.   LIBS="$LIBS -lintl" # For strftime.
  961. ])dnl
  962. dnl
  963. define(AC_IRIX_SUN,
  964. [echo checking for IRIX libsun
  965. if test -f /usr/lib/libsun.a; then
  966.   LIBS="$LIBS -lsun"
  967. fi
  968. ])dnl
  969. dnl
  970. define(AC_DYNIX_SEQ,
  971. [echo checking for DYNIX/ptx libseq
  972. AC_PROGRAM_EGREP(yes,
  973. [#if defined(_SEQUENT_)
  974.   yes
  975. #endif
  976. ], SEQUENT=1)
  977. test -n "$SEQUENT" && test -f /usr/lib/libseq.a &&
  978.   LIBS="$LIBS -lseq"
  979. ])dnl
  980.